package com.ljy.my_study.leetcode.串联字符串的最大长度;

import java.util.Arrays;
import java.util.List;

public class TestMain {

//    给定一个字符串数组 arr，字符串 s 是将 arr 某一子序列字符串连接所得的字符串，如果 s 中的每一个字符都只出现过一次，那么它就是一个可行解。
//
//    请返回所有可行解 s 中最长长度。
//
//             
//
//    示例 1：
//
//    输入：arr = ["un","iq","ue"]
//    输出：4
//    解释：所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique"，最大长度为 4。
//    示例 2：
//
//    输入：arr = ["cha","r","act","ers"]
//    输出：6
//    解释：可能的解答有 "chaers" 和 "acters"。
//    示例 3：
//
//    输入：arr = ["abcdefghijklmnopqrstuvwxyz"]
//    输出：26
//             
//
//    提示：
//
//            1 <= arr.length <= 16
//            1 <= arr[i].length <= 26
//    arr[i] 中只含有小写英文字母
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        System.out.println(new TestMain().maxLength(Arrays.asList(new String[]{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"})));
    }

    public int maxLength(List<String> arr) {
        return dfs(arr,new boolean[26],0,0);
    }

    private int dfs(List<String> arr,boolean[] subArray,int index,int count){
        int newCount=count;
        if(newCount==26||index==arr.size()){
            return newCount;
        }
        for(int i=index;i<arr.size();i++){
            char[] chars=arr.get(i).toCharArray();
            int j=0;
            for(;j<chars.length;j++){
                char c=chars[j];
                int num=c-'a';
                if(!subArray[num]){
                    subArray[num]=true;
                }else{
                    break;
                }
            }
            if(j==chars.length){
                newCount=Math.max(newCount,dfs(arr,subArray,index+1,count+chars.length));
                if(newCount==26){
                    break;
                }
            }
            for(int k=0;k<j;k++){
                subArray[chars[k]-'a']=false;
            }
        }
        return newCount;
    }
}
